package com.benshou.bcss.common.quartz;

import cn.hutool.core.collection.ConcurrentHashSet;
import lombok.NonNull;
import org.quartz.JobKey;
import org.springframework.stereotype.Component;

import java.util.Set;

/**
 * JobKey 注册器
 * <p>
 *     用于注册应用中的 JobKey 。用于全局 JobKey 管理以及保持持久化强一致性。
 * </p>
 *
 * @author <a href="mailto:liuzhenbang@benshou.com">Liu Zhenbang</a>
 */
@Component
public class JobKeyRegister {

    /**
     * JobKey 的无重复列表
     */
    private final Set<JobKey> jobKeys = new ConcurrentHashSet<>();

    /**
     * 注册 JobKey。如果此 JobKey 已经被注册过，会抛出异常。
     *
     * @param jobKey JobKey
     */
    public void register(@NonNull JobKey jobKey) {
        if (!this.jobKeys.add(jobKey)) {
            throw new IllegalArgumentException("Duplicate job key: " + jobKey);
        }
    }

    /**
     * @param jobKey JobKey
     * @return 是否已经包含了 JobKey
     */
    public boolean contains(@NonNull JobKey jobKey) {
        return this.jobKeys.contains(jobKey);
    }
}
